package com.ddf.springdata.jpa.dao;

import com.ddf.springdata.jpa.entity.BaseDomain;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;

/**
 * @author DDf on 2018/12/11
 * 自定义扩展JPA的通用接口，让其他Repository继承该接口完成一些通用的查询
 */
public interface JpaBaseDao<T extends BaseDomain, S> {

	/**
	 * 单表根据字段值和value匹配查询返回一个对象，默认removed = 0
	 * @param propertiesMap field-value键值对
	 * @return
	 */
	T findOneByProperties(Map<String, String> propertiesMap);

	/**
	 * 单表根据字段值和value匹配查询返回一个对象
	 * @param propertiesMap field-value键值对
	 * @param isRemoved 是否包含removed=1的条件
	 * @return
	 */
	T findOneByProperties(Map<String, String> propertiesMap, boolean isRemoved);

	/**
	 * 单表根据字段值和value匹配查询返回对象列表
	 * @param propertiesMap field-value键值对
	 * @return
	 */
	List<T> findByProperties(Map<String, String> propertiesMap);


	/**
	 * 单表根据字段值和value匹配查询返回对象列表
	 * @param propertiesMap field-value键值对
	 * @param isRemoved 是否包含removed=1的条件
	 * @return
	 */
	List<T> findByProperties(Map<String, String> propertiesMap, boolean isRemoved);

	/**
	 * 分页根据查询键值对查询条件返回对象分页数据
	 * @param propertiesMap field-value键值对
	 * @param pageable 分页对象
	 * @return
	 */
	Page<T> pageByProperties(Map<String, String> propertiesMap, Pageable pageable);
}
